package com.borrow.service.impl;

import com.borrow.mapper.BorrowMapper;
import com.borrow.service.client.BookClient;
import com.borrow.service.BorrowService;
import com.borrow.service.client.UserClient;
import com.commons.entity.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class BorrowServiceImpl implements BorrowService {
    @Resource
    private BorrowMapper borrowMapper;

    @Resource
    private UserClient userClient;

    @Resource
    private BookClient bookClient;

    @Resource
    private RestTemplate restTemplate;
    @Override
    public ResultFul findBorrowDetailsBySid(Integer sid) {
        List<Borrow> borrows = borrowMapper.findBorrowBySid(sid);  //拿到借阅名单
//        //RestTemplate支持多种方式的远程调用
//        RestTemplate template = new RestTemplate();
//        //这里通过调用getForObject来请求其他服务，并将结果自动进行封装
//        //获取User信息 注意这里我们控制层返回的ResultFul类型，记得提取里面的data,当然，这里我们直接写一个内部调用的接口就行
//        User user = template.getForObject("http://localhost:8201/user/api/" + sid, User.class);
//        //获取每一本书的详细信息  流处理
//        List<Book> bookList = borrows
//                .stream() //注意这里我们控制层返回的ResultFul类型，记得提取里面的data，当然，这里我们直接写一个内部调用的接口就行
//                .map(b -> template.getForObject("http://localhost:8301/book/api/"+b.getBid(), Book.class))
//                .collect(Collectors.toList());
//        BorrowDetails borrowDetails = new BorrowDetails(user, bookList);
//        return ResultFul.success(borrowDetails,"获取详情信息成功！！");


//        User user = restTemplate.getForObject("http://userservice/user/api/" + sid, User.class);//这里直接用服务名，不用ip
//        //获取每一本书的详细信息  流处理
//        List<Book> bookList = borrows
//                .stream() //注意这里我们控制层返回的ResultFul类型，记得提取里面的data，当然，这里我们直接写一个内部调用的接口就行
//                .map(b -> restTemplate.getForObject("http://bookservice/book/api/"+b.getBid(), Book.class))
//                .collect(Collectors.toList());
//        BorrowDetails borrowDetails = new BorrowDetails(user, bookList);

        User user = userClient.apiFindUserById(sid);  //注入后直接调用方法即可
        List<Book> bookList = borrows
                .stream()
                .map(b -> bookClient.apiFindBookById(b.getBid()))//同样直接调用方法
                .collect(Collectors.toList());
        BorrowDetails borrowDetails = new BorrowDetails(user, bookList);
        return ResultFul.success(borrowDetails,"获取详情信息成功！！");
    }
}
